1. Field
This disclosure relates generally to a decoder in a communication system, and more specifically to a Viterbi decoder having error correction and corresponding methods therein.
2. Related Art
Many data processing systems receive and process data, so it is desirable to increase performance in the error-free reception of data. Convolutional coding is a technique that can be used to reduce the error rate in transferring or transmitting digital data. A convolutional code is a type of error-correcting code, wherein a block of data set for transmission can be encoded prior to transmission, and then decoded after reception. In one example, an encoder may have an input that receives one bit and outputs three encoded bits, in which case a “rate” of the encoder is ⅓ (i.e., one bit in produces three bits out). In a rate one encoder, the encoder receives one bit in and produces one bit out.
Every bit output from the convolutional encoder is a function of the previous k bits input, wherein “k” can be referred to as the constraint length of the code. For example, if k=3, then every bit, or bits, output by the encoder is a function of the current and previous 2 input bits.
To provide a method for error detection, “message data” (i.e., the data bits that will be transmitted from transmission in the transmitting end) can be associated with, or accompanied by, additional data that can be used at the receiving end to detect an error. One known type of error detection is a cyclic redundancy check (CRC). Prior to transmission, the message data portion of the data block can be analyzed to calculate an additional field of data, which can be referred to as a CRC. Upon reception in the receiver, a CRC can also be calculated based on the received message data. The CRC calculated in the receiver is then compared to the CRC in the received data. If the calculated CRC matches the received CRC, the message data block can be deemed correct.
A Viterbi decoder is a type of data decoder that can be used in a receiver, or other data processor, to decode a bitstream that has been convolutionally encoded. The Viterbi algorithm in the decoder performs a maximum likelihood decoding algorithm to identify a statistically most likely sequence of data, which can be depicted as a statistically most likely path through a decoder trellis diagram. A Viterbi decoder can be used in decoding convolutional codes in devices such as satellite communication systems, telephone-line modems, computer storage devices such as hard disk drives, and other similar devices.